package com.mindbox.mueblesalpes.negocio.persistence;

import java.util.List;
import java.util.Map;
import javax.ejb.Local;

/**
 * Servicio que contiene operaciones básicas y genericas para el manejo de la persistencia de las entidades
 * @author jsanchez
 */
@Local
public interface PersistenciaLocal {

    /**
	 * Realiza la creación de una entidad
	 * @param obj Entidad a crear
	 */
    public void create(java.lang.Object obj);

    /**
	 * Realiza la actualización de una entidad
	 * @param obj Entidad a actualizar
	 */
    public void update(java.lang.Object obj);

    /**
	 * Realiza la eliminación de una entidad
	 * @param obj Entidad a eliminar
	 */
    public void delete(java.lang.Object obj);

    /**
	 * Realiza la busqueda de todas las referencias de una entidad
	 * @param c Clase de la entidad
	 * @return Listado de referencias
	 */
    public java.util.List findAll(java.lang.Class c);

     /**
	 * Realiza la busqueda de una entidad a partir de su llave (id)
	 * @param c Clase de la entidad
	 * @param id Objeto que representa la llave de la entidad
	 * @return Objeto
	 */
    public java.lang.Object findById(java.lang.Class c, java.lang.Object id);

    /**
	 * Realiza una consulta dinámica sobre una entidad a partir de los filtros
	 * @author Jaimoto
	 * @param entityName Nombre de la entidad
	 * @param parameters Parametros donde la llave es el nombre del campo y el valor es el filtro
	 * @return Resultado
	 */
    public List findByFilter(String entityName, Map<String, String> parameters) throws Exception;


    /**
	 * Realiza una consulta dinámica sobre una entidad a partir de los filtros
	 * @author Jaimoto
	 * @param entityName Nombre de la entidad
	 * @param parameters Parametros donde la llave es el nombre del campo y el valor es el filtro
     * @param paramsEnum Parametros donde la llave es el nombre del campo y el enum es el filtro
	 * @return Resultado
	 */
    public List findByFilterEnum(String entityName, Map<String, String> parameters, Map<String,Enum> paramsEnum);
}
